#pragma once

#include <typedef.h>
//
#include <task_run.hpp>
#include <utils.hpp>
//
#include <tcp_server_client.hpp>

class TcpServer : public TaskRun
{
public:
	TcpServer(int port, TcpServerClient* (*pTcpClientCreator)());
	virtual ~TcpServer();
	void Start(void* arg = nullptr);
	void Send(char* data, int size);

protected:
	virtual void Run(void* arg);

private:
	void CleanUp(void);

private:
	bool m_Running;		// 运行状态
	int m_MaxClient;	// 允许接入最大的客户端数量
	int m_MaxWaitsecs;	// 绑定端口等待时长
	int m_ServerSocket; // socket服务器描述符
	int m_ServerPort;	// 监听端口号

	TcpServerClient* (*m_TcpClientCreator)(); // 客户端创建回调函数
	std::vector<TcpServerClient*> m_Clients;  // 已接入的客户端列表
};
